package cn.iocoder.yudao.module.brokerage.merchant.pojo.po;

import cn.iocoder.yudao.framework.business.basic.pojo.po.BaseEntity;
import cn.iocoder.yudao.framework.business.order.pojo.vo.OrderSnapshotVO;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.module.api.brokerage.record.enums.BrokerageRecordStatusEnum;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * <pre>
 * OOoO0OOoO0OOOooo0oOOOO0OOOOO0oooOO0ooOOO0Ooooo0OOOOo0ooooO0OOooo0Ooooo0OOOOO
 *  推广商家分佣记录 DO
 * OOoO0OOoO0OOOooo0oOOOO0OOOOO0oooOO0ooOOO0Ooooo0OOOOo0ooooO0OOooo0Ooooo0OOOOO
 * </pre>
 *
 * @author 山野羡民（1032694760@qq.com）
 * @since 2025/03/10
 */
@TableName("brokerage_merchant_record")
@Data
@NoArgsConstructor
public class AgencyBrokerageRecordDO extends BaseEntity {

    /** 招商人员用户编号 */
    private Long userId;

    /** 交易单号 */
    private String tradeNo;

    /** 订单项编号 */
    private Long orderItemId;

    /** 订单快照数据，JSON格式 */
    private String orderSnapshot;

    /** 订单数据 */
    @TableField(exist = false)
    private OrderSnapshotVO orderItem;

    @SuppressWarnings("unused")
    public OrderSnapshotVO getOrderItem() {
        if (!JsonUtils.isJson(getOrderSnapshot())) {
            return null;
        }
        return JsonUtils.parseObject(getOrderSnapshot(), OrderSnapshotVO.class);
    }

    /** 分佣比例，0-100之间的数字 */
    private Double bonusPercent;

    /** 获得佣金，单位为分 */
    private Integer bonusMoney;

    /** 来源用户编号 */
    private Long sourceUserId;

    /** 来源店铺编号 */
    private Long sourceShopId;

    /** 分佣基准金额，单位为分 */
    private Integer basePrice;

    /**
     * 状态：0-待入账、1-已结算、2-已失效、3-已取消、3-已取消
     *
     * @see BrokerageRecordStatusEnum
     */
    private Integer status;

    /**
     * 备注
     */
    private String note;

    /**
     * 解冻时间
     */
    private LocalDateTime unfreezeTime;

    /**
     * 取消时间
     */
    private LocalDateTime cancelTime;

}
